package help.me;

import android.app.*;
import android.content.*;
import android.hardware.*;
import android.os.*;


public class ActivityHelper extends Activity{

    SensorManager msm;
    
    //방향센서 값들
    double mAzimuth;//방위각= y축과 자북간의 각도
    double mPitch;//피치 = x축의 회전 각도
    double mRoll;//롤 = 구르기

    //가속센서값들
    double ax; //x축에 적용되는 힘
    double ay; // y축에 적용되는 힘
    double az; // z축에 적용되는 힘
	
	//자이로 센서 값들
    double Gyaw;
    double Gpitch;
    double Groll;
    
    double th1= 0.5;
    double th2 = 25;
    double asv;

    public class fall_detection{
    public void main(String[] args){
    	
    	while (asv<th1){
    		asv = Math.sqrt(ax*ax+ay*ay+az*az);   		    		
    		
    	}//while문 종료
    	System.out.println("위험이 감지되었습니다.");
    	
    	double dgree_mAzimuth =Math.toDegrees(mAzimuth);
    	double dgree_mPitch = Math.toDegrees(mPitch);
    	
    	double abs_mAzimuth = Math.abs(dgree_mAzimuth);//절대값 변환
    	double abs_mPitch = Math.abs(dgree_mPitch);//절대값 변환
    	
    	while(abs_mAzimuth<th2 ||abs_mPitch<th2){
    	//값 자동으로 변환되는데 몰 해줘야될까??
    		if(abs_mAzimuth < abs_mPitch){
        		
        		if (mPitch>0){
        			System.out.println("전방 fall");
        		}
        		else{
        			System.out.println("후방 fall");
        		}
        			
        	}// 전방또는 후방 감지 if문
        	else{
        		
        		if(mAzimuth>0){
        			System.out.println("오른쪽 fall");
        		}
        		else{
        			System.out.println("왼쪽 fall");
        		}
        		
        	} //else종료
    		break;
        	
    	}//두번째 while종료
    		System.out.println("위험에서 벗어났습니다.");
    	
    }//메인
    
    }//class fall_detection
	public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activityhelper);
        
        msm = (SensorManager)getSystemService(Context.SENSOR_SERVICE);//센서 서비스 이용할거야
        
	int delay = SensorManager.SENSOR_DELAY_FASTEST;//빠른주기로 갱신
		
		msm.registerListener(mSensorListener, msm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), delay);//가속
		msm.registerListener(mSensorListener, msm.getDefaultSensor(Sensor.TYPE_ORIENTATION), delay);//회전방향
		msm.registerListener(mSensorListener, msm.getDefaultSensor(Sensor.TYPE_GYROSCOPE), delay);//자이로스코프

		
    }//onCreate
	
	//액티비티 종료시 사용하지않는 자원 반환
	protected void onDestroy(){ 
		super.onDestroy();
		msm.unregisterListener(mSensorListener);
		}//onDestroy()
	
	
	SensorEventListener mSensorListener = new SensorEventListener() {
		
		@Override
		//정확도가 변할때 
		public void onAccuracyChanged(Sensor sensor, int accuracy) {
			// TODO Auto-generated method stub
		//특별히 처리할 필요없음	
		}//onAccuracy()	
	    
		@Override
		//요기서부터 센서로부터 전달된 값을 해결하자
		//센서값 변할때 부르는것
		public void onSensorChanged(SensorEvent event) {
			// TODO Auto-generated method stub
			switch(event.sensor.getType()){
			case Sensor.TYPE_ORIENTATION :
				mPitch = event.values[1]; //x축 중심 회전
				mRoll = event.values[2];//y축 중심 회전
				mAzimuth = event.values[0];//z축 중심 회전
				
				break;
				
			case Sensor.TYPE_ACCELEROMETER :
				ax = event.values[0]; //x축 가속 힘
				ay = event.values[1];// y축 가속 힘
				az = event.values[2];// z축 가속 힘
				
				break;
				
								
			case Sensor.TYPE_GYROSCOPE :

				Gyaw = event.values[0];
				Gpitch = event.values[1];
				Groll = event.values[2];

				break; 
			}
		}				
	};
}//ActivityHelper
